I datalogi er en abstrakt datatype, eller abstrakt datastruktur en matematisk model for en bestemt klasse af strukturer som har indbyrdes lignende adfærd. I programmering kan begrebet bruges til at beskrive datastrukturer som grundlæggende modellerer det samme.
En abstrakt datatype kan indirekte defineres ud fra hvilke operationer man kan udføre på den og hvilke restriktioner disse operationer er underlagt. For eksempel kan en abstrakt datastruktur defineres ud fra to operationer: skub, som indsætter noget data i strukturen, og fjern, som udtager noget data i den. Med restriktionen at fjern altid udtager det stykke data som senest blev indsat, kan man sige at den abstrakte datatype svarer til en stak. Yderligere kunne man tilføje restriktionen at begge operationer skal tage den samme mængde tid uanset hvor stor stakken er.
Abstrakte datatyper er rent teoretiske modeller som bruges til at forsimple beskrivelsen af algoritmer, til at klassificere og evaluere datastrukturer og til formelt at beskrive typesystemer i programmeringssprog.
Abstrakte datatyper kan dog implementeres ved hjælp af specifikke datatyper eller datastrukturer eller beskrives i et formelt specifikationssprog. Abstrakte datatyper er ofte implementeret som moduler hvor modulets grænseflade deklarerer procedurer som svarer til den abstrakte datatypes operationer og med dokumentation som beskriver restriktioner.
Begrebet abstrakte datatyper er også relateret til begrebet dataabstraktion, som er vigtigt i objektorienteret og kontraktbaseret programmering inden for udvikling af software.